#ifndef __ABSTRACT_SYSTEM_HH__
#define __ABSTRACT_SYSTEM_HH__

#include <boost/shared_ptr.hpp>

namespace Framework
{

/**
 * @class AbstactSystem
 * @brief Interface for all subsytems that are going to be dynamicly linked to the
 * application.
 */
class AbstractSystem
{
public: //public typedefs
    typedef boost::shared_ptr< AbstractSystem >       Ptr;
    typedef boost::shared_ptr< const AbstractSystem > CPtr;

public:
    /**
     * @brief returns name of the system
     */
    virtual const char* getName() = 0;
    
    /**
     * @brief returns the version of the system
     */
    virtual const char* getVersion() = 0;

    /**
     * @brief initializes the system
     * @note currently just for testing purposes
     */
    virtual void initialize( void ) = 0;
};

};

#endif //__ABSTRACT_SYSTEM_HH__